<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="index.css">

    <style>
        .red {
            color: red;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="container">
            <div class="form-group">
                <div class="input-group">
                    <h4>品牌管理</h4>
                </div>
            </div>
            <table class="table table-bordered table-hover mt-2">
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>资产名称</th>
                        <th>价格</th>
                        <th>创建时间</th>
                        <th>操作</th>
                    </tr>
                </thead>

                <!-- 要么有tbody，要么有tfooter -->
                <!-- 根据有没有数据判断，如果有数据数组长度一定大于0 -->
                <!-- 如果有数据，长度肯定不为0，不为0就是true，如果没数据长度就是0，0就是false -->
                <tbody v-if="list.length > 0">
                    <!-- 此时的item是每个元素，每个元素是一个对象，对象里有name -->
                    <!-- 有price有time -->
                    <tr v-for="(item,index) in list">
                        <td>{{ index + 1 }}</td>
                        <td>{{ item.name }}</td>

                        <!-- 根据条件得到true价格大于100就给true，否则给false -->
                        <td :class="{red: item.price >= 100 }">{{ item.price }}</td>
                        <td>{{ item.time | formatTime }}</td>
                        <td><a @click="del(index)" href="#">删除</a></td>
                    </tr>
                    <!-- 写死的最后一行 -->
                    <tr style="background-color: #ddd;">
                        <td>统计：</td>
                        <td colspan="2">总价钱：{{ total.toFixed(2) }}</td>
                        <td colspan="2">平均价：{{ avgPrice.toFixed(2) }}</td>
                    </tr>
                </tbody>

                <!-- 表尾部分 -->
                <tfoot v-else>
                    <tr>
                        <td colspan="5" style="text-align: center;">暂无数据</td>
                    </tr>
                </tfoot>
            </table>
            <form class="form-inline">
                <div class="form-group">
                    <div class="input-group"><input v-model="name" type="text" placeholder="资产名称" class="form-control">
                    </div>
                </div>
                <p></p>
                <div class="form-group">
                    <div class="input-group"><input v-model.number="price" type="text" placeholder="价格"
                            class="form-control"></div>
                </div>
                <p></p>
                <!-- 双标签的button放在form里，相当于就是提交 input type="submit" -->
                <!-- 那么它默认就有点击行为，点击行为就是提交表单（就是跳转） -->
                <button @click.prevent="add" class="btn btn-primary">添加资产</button>
            </form>
        </div>
    </div>


    <script src="./vue.js"></script>

    <!-- 导入moment -->
    <script src="./moment.min.js"></script>

    <script>
        // 实例化Vue对象
        new Vue({
            el: '#app',
            data: {
                // 这个数组用来保存添加的商品数据
                // 而应该从本地存储里读取出数组
                // 如果本地存储有数据，那么就从本地存储取出来，如果没数据，就给空数组
                list: JSON.parse(localStorage.getItem('brand80')) || [],
                // 双向绑定输入框里的商品名字
                name: '',
                // 获取输入框里的价格
                price: ''
            },
            methods: {
                // 添加资产的点击事件
                // 拿到事件对象
                add() {

                    // 做非空判断
                    if (this.name == '' || this.price == '') return alert('请输入完整内容')


                    // 不为空拿到输入的内容，加到数组里
                    // 能来到这里就代表都填了
                    // 因为既要添加名字，又要添加价格作为一个元素，所以应该添加成对象
                    this.list.push({
                        name: this.name,
                        price: this.price,
                        // 用当前时间作为创建日期
                        time: new Date()
                    })

                    // 添加完数据后清空输入内容
                    this.name = ''
                    this.price = ''
                },

                // 接收一个下标作为参数
                del(index) {

                    // 根据下标删除数组中的某个元素
                    // 参数1：从哪个下标开始删
                    // 参数2：删几个
                    this.list.splice(index, 1)
                }

            },

            // 过滤器
            filters: {

                formatTime(val) {

                    // 传递过来的原材料是什么就转成什么样的 年-月-日 格式
                    // 用一个日期处理的插件：moment
                    // Y代表年，写4个，代表占4位  Y是year的缩写
                    // M代表月，写2个，代表占2位  M是month的缩写
                    // D代表日，写2个，代表占2位置 D是date的缩写
                    // H代表时 hour的缩写
                    // m代表分 minute的缩写
                    // s代表秒 second的缩写
                    return moment(val).format('YYYY-MM-DD HH:mm:ss')
                }
            },

            // 计算属性
            computed: {

                // // 计算总价
                // total () {

                //     // 依赖的每行数据里的价格
                //     // 每行的数据在数组里
                //     // 换句话说就是要遍历这个数组，取出每行数据
                //     // 再把每行数据里的价格，累加起来计算出总价再返回
                //     let sum = 0
                //     // 遍历数组
                //     this.list.forEach( v => {
                //         sum += v.price 
                //     } )

                //     return sum

                //     this.list.reduce((sum, v) => {

                //     }, 0)
                // },

                // 精简写法
                total() {

                    return this.list.reduce((sum, v) => sum += v.price, 0)
                },

                // 计算平均价
                avgPrice() {

                    // 总价除以数量
                    return this.total / this.list.length
                }
            },

            // 侦听器
            watch: {

                list () {
                
                    // 当这里被调用，证明一定是数组变化了，要么是添加了，要么是删除了
                    // 所以就该存到本地存储
                    // 本地存储只能存字符串，所以如果你要存复杂类型，不能直接存
                    // 要转成JSON字符串再来存储
                    localStorage.setItem('brand80', JSON.stringify(this.list) )
                }
            }
        })
    </script>
</body>

</html>